/*
 * Copyright (C) 2023  即时通讯网(52im.net) & Jack Jiang.
 * The MobileIMSDK-Uniapp客户端 Project. All rights reserved.
 *
 * 【本产品为著作权产品，请在授权范围内放心使用，禁止外传！】
 *
 * 【本系列产品在国家版权局的著作权登记信息如下】：
 * 1）国家版权局登记名（简称）和证书号：RainbowChat（软著登字第1220494号）
 * 2）国家版权局登记名（简称）和证书号：RainbowChat-Web（软著登字第3743440号）
 * 3）国家版权局登记名（简称）和证书号：RainbowAV（软著登字第2262004号）
 * 4）国家版权局登记名（简称）和证书号：MobileIMSDK-Web（软著登字第2262073号）
 * 5）国家版权局登记名（简称）和证书号：MobileIMSDK（软著登字第1220581号）
 * 著作权所有人：江顺/苏州网际时代信息科技有限公司
 *
 * 【违法或违规使用投诉和举报方式】：
 * 联系邮件：jack.jiang@52im.net
 * 联系微信：hellojackjiang
 * 联系QQ： 413980957
 * 官方社区：http://www.52im.net
 */
class MBHashMap {
  constructor() {
    this.length = 0;
    this.maxLength = Number.MAX_VALUE;
    this.container = {};
  }

  put(objName, objValue) {
    try {
      if (this.length >= this.maxLength)
        throw new Error("[Error HashMap] : Map Datas' count overflow !");
      if (objName != "") {
        for (var p in this.container) {
          if (p == objName) {
            this.container[objName] = objValue;
            return;
          }
        }
        this.container[objName] = objValue;
        this.length++;
      }
    } catch (e) {
      return e;
    }
  }

  get(objName) {
    try {
      if (this.container[objName])
        return this.container[objName];
      return null;
    } catch (e) {
      return e;
    }
  }

  contains(objName) {
    try {
      for (var p in this.container) {
        if (p == objName)
          return true;
      }
      return false;
    } catch (e) {
      return e;
    }
  }

  containsValue(objValue) {
    try {
      for (var p in this.container) {
        if (this.container[p] === objValue)
          return true;
      }
      return false;
    } catch (e) {
      return e;
    }
  }

  remove(objName) {
    try {
      if (this.container[objName]) {
        delete this.container[objName];
        this.length--;
        return true;
      }
      return false;
    } catch (e) {
      return e;
    }
  }

  removeAll() {
    try {
      this.clear();
    } catch (e) {
      return e;
    }
  }

  clear() {
    try {
      delete this.container;
      this.container = {};
      this.length = 0;
    } catch (e) {
      return e;
    }
  }

  isEmpty() {
    if (this.length === 0)
      return true;
    else
      return false;
  }

  keySet() {
    var _keys = [];
    for (var key in this.container) {
      _keys.push(key);
    }
    return _keys;
  }

  size() {
    return this.length;
  }

  // 本方法仅用于debug时
  showAll(funValueToString) {
    if (this.length > 0) {
      console.info("[MBHashMap.js_showAll()] 正在输出HashMap内容(列表长度 %d) ------------------->", this.length);
      // 遍历
      for (var key in this.container) {
        if (funValueToString) {
          console.info("[MBHashMap.js_showAll()]       > key=%s, value=%s", key, funValueToString(this.container[key]));
        } else {
          console.info("[MBHashMap.js_showAll()]       > key=%s, value=%s", key, this.container[key]);
        }
      }
    } else {
      console.info("[MBHashMap.js_showAll()] 列表中长度为：%d !", this.length);
    }
  }
}

module.exports = MBHashMap